package com.mcgrady.oop;

import org.junit.Test;

import java.util.concurrent.Callable;

/**
 * @author McGrady
 */
public class InterfaceClassTest {
    static class User {
        private String name;
        private Integer age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }

    interface UserService {
        /**
         * 添加一个用户
         *
         * @param user 前端传递过来的用户信息
         */
        void insert(User user);

        /**
         * 按主键删除一个用户
         *
         * @param id 编号
         */
        void deleteById(int id);

        /**
         * 按主键修改一个用户
         *
         * @param id 编号
         */
        void updateById(int id);

        /**
         * 按主键查找一个用户
         *
         * @param id 编号
         * @return 对应编号的用户记录
         */
        User selectById(int id);
    }

    static class UserServiceImpl implements UserService {

        @Override
        public void insert(User user) {
            System.out.println("添加成功");
        }

        @Override
        public void deleteById(int id) {
            System.out.println("删除成功");
        }

        @Override
        public void updateById(int id) {
            System.out.println("修改成功");
        }

        @Override
        public User selectById(int id) {
            System.out.println("查询成功");
            return null;
        }
    }

    @Test
    public void userService() {
        UserService userService = new UserServiceImpl();
        userService.insert(new User());
        userService.deleteById(1);
        userService.updateById(1);
        userService.selectById(1);
    }

    static class Dog {
        private String name;
        private Integer age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }

    interface DogService {
        /**
         * 添加一只狗
         *
         * @param dog 狗类信息
         */
        void insert(Dog dog);

        /**
         * 按主键删除一只狗的信息
         *
         * @param id 编号
         */
        void deleteById(int id);

        /**
         * 按主键修改一只狗的信息
         *
         * @param id 编号
         */
        void updateById(int id);

        /**
         * 按主键查询一只狗的信息
         *
         * @param id 编号
         * @return 对应编号的狗的信息
         */
        Dog selectById(int id);
    }

    static class DogServiceImpl implements DogService {

        @Override
        public void insert(Dog dog) {
            System.out.println("添加成功");
        }

        @Override
        public void deleteById(int id) {
            System.out.println("删除成功");
        }

        @Override
        public void updateById(int id) {
            System.out.println("修改成功");
        }

        @Override
        public Dog selectById(int id) {
            System.out.println("查询成功");
            return null;
        }
    }

    @Test
    public void dogService() {
        DogService dogService = new DogServiceImpl();
        dogService.insert(new Dog());
        dogService.deleteById(1);
        dogService.updateById(1);
        dogService.selectById(1);
    }

    static class Cat {
        private String name;
        private Integer age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }

    interface CatService {
        /**
         * 添加一只猫的信息
         *
         * @param cat 猫的信息
         */
        void insert(Cat cat);

        /**
         * 按主键删除一只猫的信息
         *
         * @param id 编号
         */
        void deleteById(int id);

        /**
         * 按主键修改一只猫的信息
         *
         * @param id 编号
         */
        void updateById(int id);

        /**
         * 按主键查询一只猫的信息
         *
         * @param id 编号
         * @return 返回一只猫的信息
         */
        Cat selectById(int id);
    }

    static class CatServiceImpl implements CatService {

        @Override
        public void insert(Cat cat) {
            System.out.println("添加成功");
        }

        @Override
        public void deleteById(int id) {
            System.out.println("删除成功");
        }

        @Override
        public void updateById(int id) {
            System.out.println("修改成功");
        }

        @Override
        public Cat selectById(int id) {
            System.out.println("查询成功");
            return null;
        }
    }

    @Test
    public void catService() {
        CatService catService = new CatServiceImpl();
        catService.insert(new Cat());
        catService.deleteById(1);
        catService.updateById(1);
        catService.selectById(1);
    }
}
